[Amazon Redshift] RedshiftのIAM Roles利用が可能となりました。
はじめに
AWSチームのすずきです。
先日のAWSのアップデートにより、Amazon Redshiftのインポート(COPY)、エクスポート(UNLOAD)先として利用する、 S3などのアクセス権限管理に、IAMロールを利用する事が可能になりました。
IAMロールを利用したCOPY操作を試す機会がありましたので、紹介します。
Amazon Redshift now supports using IAM roles with COPY and UNLOAD commands
IAM設定
IAMロール作成
- AWSコンソール、IAM(Identity & Access Management)を利用します。
- ロールを指定し「新しいロールの作成」を行います。
- 任意のロール名を記入します。
- 新しく追加されたAWSサービスロール、「Amazon Redshift」を選択します。
- ポリシーのアタッチにて、任意のポリシーをアタッチします。
- ロールの信頼されたエンティティが「redshift.amazon.com」である事を確認し、ロールを作成します。
- 今回「ReadOnlyAccess」の管理ポリシーを利用しましたが、複数システムが稼働する環境などでは、ロール作成後適切なインラインポリシーへの変更をお勧めします。
Redshift設定
RedshiftクラスタにIAMロール割当
- AWSコンソール Redshift ダッシュボードより「Clusters」を開きます
- ロール付与対象クラスタを指定し、「Manage IAM Roles」を指定します
- 先ほど作成したRedshift用のIAMロールを指定します
- 適切なロールが選択された事を確認し、「Apply change」より設定反映をおこないます
- 設定対象のRedshiftクラスタ、数分間ステータス「modifying」となります
- 数分後にステータス「available」となれば、設定完了です。
- 今回の作業中、psqlでRedshiftに接続していましたが、そのセッションは切断される事はありませんでした。
COPY検証
S3
redshift-role-s3-dynamo-20160401 redshift-role-mmmmmmmmm
COPY
export DBPASSWORD=##### export DBENDPOINT=##### export DBUSER=##### export DBNAME=##### export DBPORT=8192 psql -h ${DBENDPOINT} -U ${DBUSER} -d ${DBNAME} -p ${DBPORT} << _EoF CREATE temp TABLE temp_test ( col1 varchar(128) , col2 varchar(128) ) ; COPY temp_test from 's3://redshift-test-<バケット名>/' CREDENTIALS 'aws_iam_role=arn:aws:iam::nnnnnnnnnnnn:role/redshift-role-mmmmmmmmm' REGION 'us-east-1' csv gzip ; _EoF
- s3://<バケット名> :任意のS3バケット名
- : AWSアカウント番号(数値)
- : 作成したロール
- オプション
- REGION 'us-east-1':US東のS3を利用した為、RedshiftとS3が同一であれば省略可能
- csv gzip : インポート元はCSV、gzip圧縮データを利用
COPY結果
CREATE TABLE INFO: Load into table 'temp_test' completed, 182851 record(s) loaded successfully. COPY
DynamoDB
COPY
psql -h ${DBENDPOINT} -U ${DBUSER} -d ${DBNAME} -p ${DBPORT} << _EoF CREATE temp TABLE temp_test ( col1 varchar(128) , col2 varchar(128) ) ; COPY temp_test from 'dynamodb://redshift-test-20160401' CREDENTIALS 'aws_iam_role=arn:aws:iam::nnnnnnnnnnnn:role/redshift-role-mmmmmmmmm' readratio 1 ; _EoF
- dynamodb://redshift-test-20160401 :任意のDynamoDBテーブル名
- オプション
- readratio 1 :DynamoDBキャパシティ1消費(1〜200)
COPY結果
CREATE TABLE INFO: Load into table 'temp_test' completed, 1 record(s) loaded successfully. COPY
まとめ
今回のアップデートにより、Redshift専用のIAMロールを作成する事で、 アクセスキーの漏洩リスクや、一時セッション認証情報の発行の手間をかける事なく 安全にS3、DynamoDBを利用する事が可能になりました。
Redshiftのインポート、エクスポート処理、 Lambdaの実行時間制限(2016年4月現在5分)が問題とならない軽量なものであれば、 VPC対応したLambdaとスケジュールイベントにより、EC2レスでセキュアな実装の実現性が増しました。
IAM のベストプラクティスとして、EC2ではロールの利用が推奨されていますが、 Redshiftも同様、IAM権限の付与が必要な場合、IAMロールの利用を第一にご検討ください。
参考
credentials指定方法
アクセスキー埋込
credentials 'aws_access_key_id=;aws_secret_access_key='
一時的セッション認証情報(STS)
credentials 'aws_access_key_id=;aws_secret_access_key=;token=';
IAMロール指定
credentials 'aws_iam_role='